Semigroups And Monoids In Scala